home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
CD Exchange
/
CD Exchange - Volume 1.iso
/
graphics
/
utils
/
videotracker
/
develop
/
source
/
spr.s
< prev
next >
Wrap
Text File
|
1992-02-05
|
3KB
|
190 lines
control:
jsr start2
jsr start1
rts
start1:
move.l #sprdat,a1
move.l #destination,a2
clr.l d0
move.l #6-1,d7
loop1a:
move.l a2,a0
move.l #0,(a1)+
move.l #11-1,d2
loop2:
move.w (a0),(a1)+
move.w 200*40(a0),(a1)+
add.l #40,a0
dbra d2,loop2
move.l #0,(a1)+
add.l #2,a2
dbra d7,loop1a
rts
start2:
jsr iff_search
jsr planes_1
jsr unpacker
rts
planes_1:
move.l decrunched_data,a0
move.l #planes,a1
clr.l d0
move.w width_bytes,d0
muls height,d0
planes_2:
move.l a0,(a1)
add.l #4,a1
add.l d0,a0
cmp.l #planes+20,a1
bne planes_2
rts
unpacker:
move.l #planes,a2
move.l body_chunk,a0
add.l #4,a0
move.l (a0)+,d7
move.l a0,a3
add.l d7,a3
move.w planes_num,d2
addq.w #1,d2
unp_loop:
cmp.l a3,a0
bge unpack_end
clr.w d3
pic_loop1:
move.w d3,d4
mulu #4,d4
move.l (a2,d4),a5
jsr unpack_row
move.l a5,(a2,d4)
addq.w #1,d3
cmp.w d2,d3
blt pic_loop1
move.l bmhd_chunk,a5
andi.b #1,17(a5)
beq unp_loop
move.l #mask_dummy,a5
jsr unpack_row
bra unp_loop
unpack_row:
move.l d2,-(sp)
move.w width_bytes,d2
unp_loop1:
tst.w d2
beq unpack_row_end
clr.w d0
tst.w comp_flag
bne unp_comp
move.w width_bytes,d0
subq.w #1,d0
bra unp_loop2
unp_comp:
move.b (a0)+,d0
bmi packed
unp_loop2:
move.b (a0)+,(a5)+
subq.w #1,d2
dbra d0,unp_loop2
bra unp_loop1
packed:
neg.b d0
move.b (a0)+,d1
unp_loop3:
move.b d1,(a5)+
subq.w #1,d2
dbra d0,unp_loop3
bra unp_loop1
unpack_row_end:
move.l (sp)+,d2
rts
unpack_end:
rts
iff_search:
move.l crunched_data,a0
add.l #12,a0
move.l a0,bmhd_chunk
move.l 4(a0),d0
add.l d0,a0
add.l #8,a0
move.l a0,cmap_chunk
iff_l1:
move.l 4(a0),d0
add.l d0,a0
add.l #8,a0
move.l #'BODY',d1
cmp.l (a0),d1
bne iff_l1
move.l a0,body_chunk
move.l bmhd_chunk,a2
move.l a2,a1
add.l #16,a1
clr.w d0
move.b (a1),d0
cmp.w #6,d0
blt iff_cont
move.w #6,d0
iff_cont:
move.l decrunched_data,a0
move.w d0,8(a0)
subq.w #1,d0
move.w d0,planes_num
move.l a2,a1
add.l #18,a1
move.b (a1),comp_flag
move.l a2,a1
add.l #8,a1
clr.l d0
move.w (a1)+,d0
move.w d0,width
clr.l d3
cmp.w #640,d0
blt iff_cont3
or.w #$8000,d3
iff_cont3:
move.w d0,d1
and.w #7,d1
beq iff_cont2
or.w #8,d0
iff_cont2:
divu #8,d0
move.w d0,width_bytes
clr.l d0
move.w (a1),d0
move.w d0,height
cmp.w #400,d0
blt iff_cont4
or.w #4,d3
iff_cont4:
rts
crunched_data: DC.L source
decrunched_data: DC.L destination
bmhd_chunk: DC.L 0
cmap_chunk: DC.L 0
body_chunk: DC.L 0
planes: ds.L 10
width: DC.W 0
height: DC.W 0
planes_num: DC.W 0
comp_flag: DC.W 0
width_bytes: DC.W 0
mask_dummy: ds.B 128
source incbin 'h:asm/psychadelic/p/spr.pic'
cnop 0,2
destination ds.b 2*200*40
sprdat ds.b 6*52
sprdat.e